Параллелизм на Красной планете — это искусство управления несколькими независимыми операциями — например, навигацией ровера, передачей данных о жизнедеятельности и связью со спутниками — без остановки системы. В языке Go независимо выполняющаяся задача называется независимо выполняющаяся задача называется горутина.
1. Принцип непредсказуемости
Лучше всегда считать, что операции в разных горутинах могут выполняться в любом порядке. Поскольку среда выполнения Go распределяет задачи между доступными ядрами, мы не можем полагаться на то, что один ровер завершит сканирование до того, как другой начнёт передачу, без явной синхронизации.
2. Механизмы синхронизации
Для управления этими задачами язык Go предоставляет два основных инструмента:
- Взаимное исключение: Горутины могут использовать
муьтексчтобы исключить друг друга от одновременного выполнения чего-либо. - Оператор выбора: Это выглядит как оператор switch, где каждый случай содержит получение или отправку данных через канал.
selectожидает, пока один из случаев станет готовым, а затем выполняет его.
3. Шаблон рабочего процесса
Долгоживущие рабочие процессы обычно используют бесконечный цикл вместе с select для одновременного мониторинга нескольких каналов связи:
for {
select {
// Ожидание каналов здесь.
}
}
}